#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>

#define FILE_NAME "log.txt"

//重定向：fd不变，fd指向的文件改变

//系统调用进行重定向
int main() 
{ 
    int fd = open(FILE_NAME, O_CREAT|O_WRONLY|O_TRUNC, 0666); //O_TRUNC输出重定向 O_APPEND追加重定向
    //int fd = open(FILE_NAME, O_RDONLY); //输入重定向
    if(fd < 0) {
        perror("open");
        return 1;
    }
    dup2(fd, 1); //将fd指向的文件给1号fd
    
    fprintf(stdout, "fd: %d\n", fd);
    fprintf(stdout, "stdout->fd: %d\n", stdout->_fileno);
    fflush(stdout);

    close(fd);
    return 0;
}

//以fd分配规则模拟重定向
int main0() 
{
    //关闭1号fd再新建文件，fd分配为1 -> 重定向了
    close(1);
    int fd = open(FILE_NAME, O_CREAT|O_WRONLY|O_TRUNC, 0666);
    if(fd < 0) {
        perror("open");
        return 1;
    }
    
    //fprintf向stdout写入，实际是向1号fd写入，即向log.txt写入
    fprintf(stdout, "fd: %d\n", fd);
    fprintf(stdout, "stdout->fd: %d\n", stdout->_fileno);
    fflush(stdout);

    close(fd);

    return 0;
}
